/*
 * BSM6.0
 *
 * Copyright 2012-2013 (C) SINODATA CO., LTD. All Rights Reserved.
 */
package com.sinodata.bsm.center.dao;

import java.util.List;
import java.util.Map;

import com.sinodata.bsm.center.bean.Condition;
import com.sinodata.bsm.center.bean.Page;
import com.sinodata.bsm.common.vo.PropertyValue;

/**
 * <p>
 * Description: 
 * </p>
 *
 * @author tangli
 * @version 1.0

 * <p>
 * History: 
 *
 * Date                     Author         Version     Description
 * ---------------------------------------------------------------------------------
 * 2012-6-13 上午10:46:13          tangli         1.0         To create
 * </p>
 *
 * @since 
 * @see     
 */
public interface PropertyValueDao {

    public void insert(List<Map<String, Object>> values);

    public void insertObjectValues(List<Object[]> values);

    /**
     * 查询一段时间内一个资源的[一个或多个]指标值   用来画性能曲线  无分页 
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @return
     */
    public List<PropertyValue> getPropValuesByDate(Long resId, int[] storeOrder, String startDate, String endDate);

    /**
     * 查询一个资源 一段时间内的汇聚指标值    无分页
     * @param resId 
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param reduceType   1:时汇聚   2:日汇聚   原始指标用getPropValuesByDate查询
     * @return
     */
    public List<PropertyValue> getReducePropByDate(Long resId, int[] storeOrder, String startDate, String endDate, String reduceType);

    /**
     * 根据间隔的设置 查询一个资源 一段时间内的汇聚指标值 并进行统计
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param reduceType
     * @return
     */
    public Map<String, String> queryCountPropValuesBySpace(Long resId, int[] storeOrder, String startDate, String endDate, String reduceType, List<String> spaceTimeList);

    /**
     * 生成趋势图所需要的数据
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param reduceType   1:时汇聚   2:日汇聚
     * @param trendType    0:均值       1:峰值
     * @return
     */
    public List<PropertyValue> getTrendPropByDate(Long resId, int[] storeOrder, String startDate, String endDate, String trendType, String reduceType);

    /**
     * 同比和环比查询
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param trendType
     * @param reduceType
     * @param choiceType
     * @return
     */
    public List<PropertyValue> getThendPropCompareByDate(Long resId, int[] storeOrder, String startDate, String endDate, String trendType, String reduceType, String choiceType);

    /**
     * 获取指标数据  汇聚  有分页  查询用
     * @param resId
     * @param page  分页信息
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param dimen
     * @return page : 分页后的指标数据
     */
    @SuppressWarnings("rawtypes")
    public Page getReducePropValuesByPage(Long resId, Page page, int[] storeOrder, String startDate, String endDate, String reduce);

    /**
     * 获取指标的公差值
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param reduceType
     * @return
     */
    public List<PropertyValue> getPropValValueByDate(Long resId, int[] storeOrder, String startDate, String endDate, String reduceType);

    /**
     * 获取指标数据   原始  有分页   查询用
     * @param resId
     * @param page
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @return
     */
    @SuppressWarnings("rawtypes")
    public Page getPropValuesByPage(Long resId, Page page, int[] storeOrder, String startDate, String endDate);

    /**
     * 获取日志内容的指标  需要同时查询property_values表跟property_object_value表
     * 日志内容放在property_object_value表的file_content字段中
     * @return
     */
    public Page getLogContentPropsByPage(Long resId, Page page, int[] storeOrder, String startDate, String endDate);

    /**
     * 执行存储过程
     * @return
     */
    public String doPropCheckProc();

    /**
     * 查询检查指标采集的时间
     * @return
     */
    public String queryCheckedTime();

    /**
     * 查询指标检查数据
     * @param page
     * @param condition
     * @return
     */
    public Page<String[]> queryCheckedProp(Page<String[]> page, Condition condition);

    /**
     * 
     * @param resIds
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @param reduceType
     * @return Map<Long, List<PropertyValue>>
     */
    public Map<Long, List<PropertyValue>> getPropValValueByDate(Long[] resIds, int storeOrder, String startDate, String endDate, String reduceType);

    /**
     * 查询某个指标的最大值
     * @param resId
     * @param storeOrder
     * @param startDate
     * @param endDate
     * @return
     */
    public String queryMaxPropValueByDate(Long resId, int[] storeOrder, String startDate, String endDate);

}
